#!/usr/bin/python3
# coding=utf-8

import numpy as np
import os

def mish(x):
    """计算Mish激活函数：f(x) = x·tanh(ln(1+e^{x}))
    
    参数:
        x: 输入数组
        
    返回:
        计算结果数组
    """
    # 使用数值稳定的实现方式
    softplus = np.log1p(np.exp(x))  # ln(1 + e^x)，比log(1+exp(x))更稳定
    tanh_softplus = np.tanh(softplus)  # tanh(ln(1 + e^x))
    return x * tanh_softplus  # x * tanh(ln(1 + e^x))

def gen_golden_data_mish():
    """生成Mish激活函数的测试数据"""
    # 配置参数（保持原有结构）
    dtype = np.float32  # 保持半精度浮点
    input_shape = [8, 5120]  # 保持原有维度
    
    # 生成输入数据（范围调整为-10到10以覆盖Mish函数的主要行为区域）
    x = np.random.uniform(-10, 10, input_shape).astype(dtype)
    
    # 计算Mish函数（添加安全处理避免数值问题）
    with np.errstate(over='ignore', under='ignore', invalid='ignore'):
        golden = mish(x).astype(dtype)
    
    # 创建输入输出目录（保持原有方式）
    os.makedirs("./input", exist_ok=True)
    os.makedirs("./output", exist_ok=True)
    
    # 保存文件（保持原有格式）
    x.tofile("./input/input_x.bin")
    golden.tofile("./output/golden.bin")

if __name__ == "__main__":
    gen_golden_data_mish()